<?php
/**
 * 支付异步回调地址
 * Created by PhpStorm.
 * User: Jmashimaro
 * Date: 2015/5/15
 * Time: 13:24
 */
class NotifyApp extends MallbaseApp {


    //微信app异步回调
    public function wxAppNotify() {
        include_once(ROOT_PATH."/includes/payments/WxPayPubHelper/log_.php");
        include_once(ROOT_PATH."/includes/payments/WxPayPubHelper/WxPayPubHelper.php");

        //以log文件形式记录回调信息
        $log_ = new Log_();
        $log_name = ROOT_PATH."/includes/payments/WxPayPubHelper/notify_url.log";//log文件路径

        //使用通用通知接口
        $notify = new Notify_pub();

        //存储微信的回调
        $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
        $notify->saveData($xml);

        //验证签名，并回应微信。
        //对后台通知交互时，如果微信收到商户的应答不是成功或超时，微信认为通知失败，
        //微信会通过一定的策略（如30分钟共8次）定期重新发起通知，
        //尽可能提高通知的成功率，但微信不保证通知最终能成功。
        if($notify->checkSign() == FALSE){
            $notify->setReturnParameter("return_code","FAIL");//返回状态码
            $notify->setReturnParameter("return_msg","签名失败");//返回信息
        }else{
            $notify->setReturnParameter("return_code","SUCCESS");//设置返回码
        }
        $returnXml = $notify->returnXml();
        echo $returnXml;

        //==商户根据实际情况设置相应的处理流程，此处仅作举例=======

        //以log文件形式记录回调信息
        $log_->log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");

        if($notify->checkSign() == TRUE) {
            if ($notify->data["return_code"] == "FAIL") {
                //此处应该更新一下订单状态，商户自行增删操作
                $log_->log_result($log_name,"【通信出错】:\n".$xml."\n");
            } elseif ($notify->data["result_code"] == "FAIL") {
                //此处应该更新一下订单状态，商户自行增删操作
                $log_->log_result($log_name,"【业务出错】:\n".$xml."\n");
            } else {
                //此处应该更新一下订单状态，商户自行增删操作
                $order_model = m('order');
                $sql = "SELECT order_sn,`status` FROM ".DB_PREFIX."order WHERE order_sn= '{$notify->data['out_trade_no']}'";
                $row = $order_model->getRow($sql);
                if ($row && $row['status'] == ORDER_PENDING) {
                    $sql = "UPDATE ".DB_PREFIX."order SET `status`=".ORDER_ACCEPTED.",out_trade_sn='{$notify->data['transaction_id']}',
                    pay_time=".time().",payment_id=1,payment_name='微信',payment_code='wxpay' WHERE order_sn='{$row['order_sn']}'";
                    $flag = $order_model->query($sql);
                    if ($flag === false) {
                        $log_->log_result($log_name,"【更新订单失败】:\n".$xml."\n");
                        exit;
                    }
                }
                $log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
            }

            //商户自行增加处理流程,
            //例如：更新订单状态
            //例如：数据库操作
            //例如：推送支付完成信息
        }

    }

}